/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.objetos;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Jun
 */
public class ClienteMetodos {
    private Pessoa pessoa = new Pessoa();
    private Cliente cliente = new Cliente();
    private String mensagem = "";
    
    private List listaClientes = new ArrayList();
    
    private String filtro = "";
    
    /**
     *
     * Metodo Buscar Clientes
     * Pega clientes do banco
     * de acordo com o filtro
     * feito na sql
    */
    
    
    public void buscarClientes() {
        Conexao con = new Conexao();
        try {
            
            con.inicia();
            String query = "SELECT * FROM bars.pessoa NATURAL JOIN bars.cliente WHERE upper(NOME) like upper('"+filtro+"%') ORDER BY nome";
            ResultSet rs = con.executa(query);
            listaClientes.clear();
            while (rs.next()) {
                Pessoa p = new Pessoa();
                Cliente c = new Cliente();
                p.setCpf(Long.toString(rs.getLong("cpf")));
                p.setNome(rs.getString("nome"));
                p.setEndereco(rs.getString("endereco"));
                p.setTelefone(Long.toString(rs.getLong("tel")));
                p.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
                p.setEmail(rs.getString("email"));
                c.setIdCliente(Integer.toString(rs.getInt("idCliente")));
                c.setPessoa(p);
                listaClientes.add(c);
            }
            
            rs.close();
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }
    
     /**
     *
     * Metodo Buscar  1 Cliente
     * Pega 1 cliente do banco
     * @param id - id do cliente selecionado
    */
    
    
    public void buscarClienteId(String id) {
        Conexao con = new Conexao();
        try {
            
            con.inicia();
            String query = "SELECT * FROM bars.pessoa natural join bars.cliente where idcliente = "+id+" ORDER BY nome";
            ResultSet rs = con.executa(query);
            while (rs.next()) {
                Pessoa p = new Pessoa();
                Cliente c = new Cliente();
                p.setCpf(Long.toString(rs.getLong("cpf")));
                p.setNome(rs.getString("nome"));
                p.setEndereco(rs.getString("endereco"));
                p.setTelefone(Long.toString(rs.getLong("tel")));
                p.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
                p.setEmail(rs.getString("email"));
                c.setIdCliente(Integer.toString(rs.getInt("idCliente")));
                c.setPessoa(p);
                setCliente(c);
            }
            
            rs.close();
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
            System.out.println(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }

    /**
     * Metodo Cadastrar Cliente
     * Cadastra um novo cliente no banco
     */
    
    
    public void cadastrarCliente() {
        Conexao con = new Conexao();
        try {
            con.inicia();
            String query = "INSERT INTO bars.pessoa (cpf,nome,endereco,tel,email)"
            +"VALUES(" + pessoa.getCpf() + ",'" + pessoa.getNome() + "','" + pessoa.getEndereco()
            +"','" + pessoa.getTelefone() + "','" + pessoa.getEmail()+ "');";
            con.atualiza(query);
            String query3 = "SELECT idpessoa,cpf FROM bars.pessoa WHERE cpf = " + pessoa.getCpf();
            ResultSet rs = con.executa(query3);
            rs.next();
            pessoa.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
            String query2 = "INSERT INTO bars.cliente values(" + pessoa.getIdPessoa() + ")";
            con.atualiza(query2);
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }
    
    /**
     * Metodo Verificar Cliente
     * Verifica se o cliente existe
     * @param cpf - cpf do cliente selecionado
     * @return integer
     */
    
    
    public int verificarCliente(String cpf) {
        Conexao con = new Conexao();
        try {
            con.inicia();
            String query = "SELECT * FROM bars.cliente natural join bars.pessoa where  cpf = "+cpf;
            ResultSet rs = con.executa(query);
            if(rs.next()) {
                int idc = rs.getInt("idcliente");
                rs.close();
                con.encerra();
                return idc;
            }else{
                rs.close();
                con.encerra();
                return 0;
            }
            
            
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
            return 0;
        } 
    }
    /**
     *
     * Metodo Editar Cliente
     * Atualiza um cliente ja existente no banco
    */
    
    
    
    public void editarCliente() {
        Conexao con = new Conexao();
        try {
            con.inicia();
            String query = "UPDATE bars.pessoa"
                    +" SET cpf = "+pessoa.getCpf() + ", nome = '"+pessoa.getNome() +"', endereco ='"+ pessoa.getEndereco()
                    +"', tel = "+ pessoa.getTelefone() +",email = '"+ pessoa.getEmail()+"'"
                    +" WHERE idpessoa = "+pessoa.getIdPessoa();
            
            con.atualiza(query);
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }
    
    /**
     *
     * Metodo Remover Cliente
     * remove um cliente existente no banco
    */
    
    public void removerCliente() {
        Conexao con = new Conexao();
        try {
            con.inicia();
            String query3 = "SELECT idpessoa FROM bars.cliente WHERE idcliente = " + cliente.getIdCliente();
            ResultSet rs = con.executa(query3);
            rs.next();
            pessoa.setIdPessoa(Integer.toString(rs.getInt("idPessoa")));
            String query = "DELETE FROM bars.cliente"
                    +" WHERE idcliente = "+cliente.getIdCliente();
            String query2 = "DELETE FROM bars.pessoa"
                    +" WHERE idpessoa = "+pessoa.getIdPessoa();
            
            con.atualiza(query);
            con.atualiza(query2);
        } catch (Exception e) {
            this.setMensagem(e.getMessage());
        } finally {
            try {
                con.encerra();
            } catch (SQLException closeE) {
                this.setMensagem(closeE.getMessage());
            }
        }
    }

    public List getListaClientes() {
        return listaClientes;
    }

    public void setListaClientes(List listaClientes) {
        this.listaClientes = listaClientes;
    }
    

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public String getFiltro() {
        return filtro;
    }

    public void setFiltro(String filtro) {
        this.filtro = filtro;
    }
    
}
